home *** CD-ROM | disk | FTP | other *** search
/ Aminet 5 / Aminet 5 - March 1995.iso / Aminet / mus / midi / NoteOn.lha / NoteOn / NoteOnQwerty.c < prev    next >
C/C++ Source or Header  |  1995-01-30  |  15KB  |  829 lines

  1. #ifndef MAKE_ID
  2. #define MAKE_ID(a,b,c,d) ((ULONG) (a)<<24 | (ULONG) (b)<<16 | (ULONG) (c)<<8 | (ULONG) (d))
  3. #endif
  4.  
  5. #ifdef _DCC
  6. #define __inline
  7. #endif
  8.  
  9.  
  10. #include <stdlib.h>
  11. #include <stdio.h>
  12. #include <ctype.h>
  13. #include <string.h>
  14. #include <midi/midi.h>
  15. #include <sys/types.h>
  16. #include <utility/hooks.h>
  17. #include <libraries/mui.h>
  18. #include <proto/muimaster.h>
  19. #include <clib/exec_protos.h>
  20. #include <exec/memory.h>
  21. #include <clib/alib_protos.h>
  22.  
  23.  
  24. #define HOOK __saveds __asm
  25. #define A0(stuff) register __a0 stuff
  26. #define A1(stuff) register __a1 stuff
  27. #define A2(stuff) register __a2 stuff
  28.  
  29. UBYTE Velocity=63;
  30. UBYTE MidiChannel=1;
  31.  
  32. struct ObjApp
  33. {
  34.     APTR    App;
  35.     APTR    WI_Principale;
  36.     APTR    BT_2;
  37.     APTR    BT_3;
  38.     APTR    BT_5;
  39.     APTR    BT_6;
  40.     APTR    BT_7;
  41.     APTR    BT_A;
  42.     APTR    BT_Z;
  43.     APTR    BT_E;
  44.     APTR    BT_R;
  45.     APTR    BT_T;
  46.     APTR    BT_Y;
  47.     APTR    BT_U;
  48.     APTR    BT_I;
  49.     APTR    BT_S;
  50.     APTR    BT_D;
  51.     APTR    BT_G;
  52.     APTR    BT_H;
  53.     APTR    BT_J;
  54.     APTR    BT_W;
  55.     APTR    BT_X;
  56.     APTR    BT_C;
  57.     APTR    BT_V;
  58.     APTR    BT_B;
  59.     APTR    BT_N;
  60.     APTR    BT_Virgule;
  61.     APTR    BT_PointVirg;
  62.     APTR    SL_velocity;
  63.     APTR    SL_MidiChannel;
  64. };
  65.  
  66. struct MRoute *RouteOut;
  67. struct MSource *source;
  68. struct ObjApp * App;
  69. struct Library        *MidiBase    = NULL;
  70. struct Library        *MUIMasterBase    = NULL;
  71.  
  72.  
  73. ULONG HOOK NoteOn(A0(struct Hook *hook),A2(APTR object),A1(LONG* notenumber))
  74. {
  75.     UBYTE buf[3];
  76.     int len=3;
  77.  
  78.  
  79.         buf[0]=    0x90 + ((MidiChannel-1) & 0x0f);
  80.         buf[1]=    (UBYTE)(*notenumber);
  81.         buf[2]=    Velocity;
  82.         
  83.         PutMidiStream(source,NULL,buf,len,len);        
  84.  
  85.     return 0;
  86. }
  87.  
  88.  
  89. ULONG HOOK NoteOff(A0(struct Hook *hook),A2(APTR object),A1(LONG* notenumber))
  90. {
  91.     UBYTE buf[3];
  92.     int len=3;
  93.  
  94.         buf[0]=    0x80 + ((MidiChannel-1) & 0x0f);
  95.         buf[1]=    (UBYTE)(*notenumber);
  96.         buf[2]=    0x3f;
  97.         
  98.         PutMidiStream(source,NULL,buf,len,len);        
  99.  
  100.     return 0;
  101. }
  102.  
  103. ULONG HOOK VelocityChange(A0(struct Hook *hook),A2(APTR object),A1(APTR message))
  104. {
  105.     LONG i;
  106.     ULONG *address=message;
  107.     struct ObjApp *obj=(struct ObjApp *)*address;
  108.  
  109.     get(obj->SL_velocity,MUIA_Slider_Level,&i);
  110.     Velocity = (UBYTE)i;
  111.     return 0;
  112. }
  113.  
  114. ULONG HOOK MidiChannelChange(A0(struct Hook *hook),A2(APTR object),A1(APTR message))
  115. {
  116.     LONG i;
  117.     ULONG *address=message;
  118.     struct ObjApp *obj=(struct ObjApp *)*address;
  119.  
  120.     get(obj->SL_MidiChannel,MUIA_Slider_Level,&i);
  121.     MidiChannel = (UBYTE)i;
  122.     return 0;
  123. }
  124.  
  125. struct ObjApp * CreateApp(void)
  126. {
  127.     struct ObjApp * Object;
  128.  
  129.     APTR    GROUP_ROOT_0, GR_alt_aigu, Space_0, Space_1, Space_2, Space_3, Space_4;
  130.     APTR    Space_5, GR_nat_aigu, Space_7, GR_alt_grave, Space_8, Space_9, Space_10;
  131.     APTR    Space_11, Space_12, Space_13, GR_nat_grave, Space_14, obj_aux0, obj_aux1;
  132.     APTR    obj_aux2, obj_aux3;
  133.     static const struct Hook NoteOnHook = { { NULL,NULL },(VOID *)NoteOn,NULL,NULL };
  134.     static const struct Hook NoteOffHook = { { NULL,NULL },(VOID *)NoteOff,NULL,NULL };
  135.     static const struct Hook VelocityChangeHook = { { NULL,NULL },(VOID *)VelocityChange,NULL,NULL };
  136.     static const struct Hook MidiChannelChangeHook = { { NULL,NULL },(VOID *)MidiChannelChange,NULL,NULL };
  137.  
  138.  
  139.     if (!(Object = AllocVec(sizeof(struct ObjApp), MEMF_PUBLIC|MEMF_CLEAR)))
  140.         return(NULL);
  141.  
  142.     Space_0 = HSpace(0);
  143.  
  144.     Object->BT_2 = SimpleButton("_2 C#4");
  145.  
  146.     Object->BT_3 = SimpleButton("_3 D#4");
  147.  
  148.     Space_1 = HSpace(0);
  149.  
  150.     Space_2 = HSpace(0);
  151.  
  152.     Object->BT_5 = SimpleButton("_5 F#4");
  153.  
  154.     Object->BT_6 = SimpleButton("_6 G#4");
  155.  
  156.     Object->BT_7 = SimpleButton("_7 A#4");
  157.  
  158.     Space_3 = HSpace(0);
  159.  
  160.     Space_4 = HSpace(0);
  161.  
  162.     Space_5 = HSpace(0);
  163.  
  164.     GR_alt_aigu = GroupObject,
  165.         MUIA_HelpNode, "GR_alt_aigu",
  166.         MUIA_Group_Horiz, TRUE,
  167.         Child, Space_0,
  168.         Child, Object->BT_2,
  169.         Child, Object->BT_3,
  170.         Child, Space_1,
  171.         Child, Space_2,
  172.         Child, Object->BT_5,
  173.         Child, Object->BT_6,
  174.         Child, Object->BT_7,
  175.         Child, Space_3,
  176.         Child, Space_4,
  177.         Child, Space_5,
  178.     End;
  179.  
  180.     Object->BT_A = SimpleButton("_Q C4");
  181.  
  182.     Object->BT_Z = SimpleButton("_W D4");
  183.  
  184.     Object->BT_E = SimpleButton("_E E4");
  185.  
  186.     Object->BT_R = SimpleButton("_R F4");
  187.  
  188.     Object->BT_T = SimpleButton("_T G4");
  189.  
  190.     Object->BT_Y = SimpleButton("_Y A4");
  191.  
  192.     Object->BT_U = SimpleButton("_U B4");
  193.  
  194.     Object->BT_I = SimpleButton("_I C5");
  195.  
  196.     GR_nat_aigu = GroupObject,
  197.         MUIA_HelpNode, "GR_nat_aigu",
  198.         MUIA_Group_Horiz, TRUE,
  199.         Child, Object->BT_A,
  200.         Child, Object->BT_Z,
  201.         Child, Object->BT_E,
  202.         Child, Object->BT_R,
  203.         Child, Object->BT_T,
  204.         Child, Object->BT_Y,
  205.         Child, Object->BT_U,
  206.         Child, Object->BT_I,
  207.     End;
  208.  
  209.     Space_7 = VSpace(20);
  210.  
  211.     Space_8 = HSpace(0);
  212.  
  213.     Object->BT_S = SimpleButton("_S C#3");
  214.  
  215.     Object->BT_D = SimpleButton("_D D#3");
  216.  
  217.     Space_9 = HSpace(0);
  218.  
  219.     Space_10 = HSpace(0);
  220.  
  221.     Object->BT_G = SimpleButton("_G F#3");
  222.  
  223.     Object->BT_H = SimpleButton("_H G#3");
  224.  
  225.     Object->BT_J = SimpleButton("_J A#3");
  226.  
  227.     Space_11 = HSpace(0);
  228.  
  229.     Space_12 = HSpace(0);
  230.  
  231.     Space_13 = HSpace(0);
  232.  
  233.     GR_alt_grave = GroupObject,
  234.         MUIA_HelpNode, "GR_alt_grave",
  235.         MUIA_Group_Horiz, TRUE,
  236.         Child, Space_8,
  237.         Child, Object->BT_S,
  238.         Child, Object->BT_D,
  239.         Child, Space_9,
  240.         Child, Space_10,
  241.         Child, Object->BT_G,
  242.         Child, Object->BT_H,
  243.         Child, Object->BT_J,
  244.         Child, Space_11,
  245.         Child, Space_12,
  246.         Child, Space_13,
  247.     End;
  248.  
  249.     Object->BT_W = SimpleButton("_Z C3");
  250.  
  251.     Object->BT_X = SimpleButton("_X D3");
  252.  
  253.     Object->BT_C = SimpleButton("_C E3");
  254.  
  255.     Object->BT_V = SimpleButton("_V F3");
  256.  
  257.     Object->BT_B = SimpleButton("_B G3");
  258.  
  259.     Object->BT_N = SimpleButton("_N A3");
  260.  
  261.     Object->BT_Virgule = SimpleButton("_M B3");
  262.  
  263.     Object->BT_PointVirg = SimpleButton("_, C4");
  264.  
  265.     GR_nat_grave = GroupObject,
  266.         MUIA_HelpNode, "GR_nat_grave",
  267.         MUIA_Group_Horiz, TRUE,
  268.         Child, Object->BT_W,
  269.         Child, Object->BT_X,
  270.         Child, Object->BT_C,
  271.         Child, Object->BT_V,
  272.         Child, Object->BT_B,
  273.         Child, Object->BT_N,
  274.         Child, Object->BT_Virgule,
  275.         Child, Object->BT_PointVirg,
  276.     End;
  277.  
  278.     Space_14 = VSpace(20);
  279.  
  280.     Object->SL_velocity = SliderObject,
  281.         MUIA_HelpNode, "SL_velocity",
  282.         MUIA_Slider_Min, 0,
  283.         MUIA_Slider_Max, 127,
  284.         MUIA_Slider_Level, 63,
  285.     End;
  286.  
  287.     obj_aux1 = Label2("Velocity");
  288.  
  289.     obj_aux0 = GroupObject,
  290.         MUIA_Group_Columns, 2,
  291.         Child, obj_aux1,
  292.         Child, Object->SL_velocity,
  293.     End;
  294.  
  295.     Object->SL_MidiChannel = SliderObject,
  296.         MUIA_HelpNode, "SL_MidiChannel",
  297.         MUIA_Slider_Min, 1,
  298.         MUIA_Slider_Max, 16,
  299.         MUIA_Slider_Level, 1,
  300.     End;
  301.  
  302.     obj_aux3 = Label2("Midi Channel");
  303.  
  304.     obj_aux2 = GroupObject,
  305.         MUIA_Group_Columns, 2,
  306.         Child, obj_aux3,
  307.         Child, Object->SL_MidiChannel,
  308.     End;
  309.  
  310.     GROUP_ROOT_0 = GroupObject,
  311.         Child, GR_alt_aigu,
  312.         Child, GR_nat_aigu,
  313.         Child, Space_7,
  314.         Child, GR_alt_grave,
  315.         Child, GR_nat_grave,
  316.         Child, Space_14,
  317.         Child, obj_aux0,
  318.         Child, obj_aux2,
  319.     End;
  320.  
  321.     Object->WI_Principale = WindowObject,
  322.         MUIA_Window_Title, "NoteOn",
  323.         MUIA_Window_ID, MAKE_ID('0', 'W', 'I', 'N'),
  324.         WindowContents, GROUP_ROOT_0,
  325.     End;
  326.  
  327.     Object->App = ApplicationObject,
  328.         MUIA_Application_Author, "Stanis Humez",
  329.         MUIA_Application_Base, "NOTEON",
  330.         MUIA_Application_Title, "NoteOn",
  331.         MUIA_Application_Version, "$VER: NoteOn 1.00 (30.01.1995)",
  332.         MUIA_Application_Copyright, "© 1995 Stanis Humez",
  333.         MUIA_Application_Description, "Midi Keyboard",
  334.         SubWindow, Object->WI_Principale,
  335.     End;
  336.  
  337.  
  338.     if (!Object->App)
  339.     {
  340.         FreeVec(Object);
  341.         return(NULL);
  342.     }
  343.  
  344.     DoMethod(Object->WI_Principale,
  345.         MUIM_Notify, MUIA_Window_CloseRequest, TRUE,
  346.         Object->App,
  347.         2,
  348.         MUIM_Application_ReturnID, MUIV_Application_ReturnID_Quit
  349.         );
  350.  
  351.     DoMethod(Object->BT_2,
  352.         MUIM_Notify, MUIA_Pressed, TRUE,
  353.         Object->App,
  354.         3,
  355.         MUIM_CallHook, &NoteOnHook,61
  356.         );
  357.  
  358.     DoMethod(Object->BT_2,
  359.         MUIM_Notify, MUIA_Pressed, FALSE,
  360.         Object->App,
  361.         3,
  362.         MUIM_CallHook, &NoteOffHook,61
  363.         );
  364.  
  365.     DoMethod(Object->BT_3,
  366.         MUIM_Notify, MUIA_Pressed, TRUE,
  367.         Object->App,
  368.         3,
  369.         MUIM_CallHook, &NoteOnHook,63
  370.         );
  371.  
  372.     DoMethod(Object->BT_3,
  373.         MUIM_Notify, MUIA_Pressed, FALSE,
  374.         Object->App,
  375.         3,
  376.         MUIM_CallHook, &NoteOffHook,63
  377.         );
  378.  
  379.     DoMethod(Object->BT_5,
  380.         MUIM_Notify, MUIA_Pressed, TRUE,
  381.         Object->App,
  382.         3,
  383.         MUIM_CallHook, &NoteOnHook,66
  384.         );
  385.  
  386.     DoMethod(Object->BT_5,
  387.         MUIM_Notify, MUIA_Pressed, FALSE,
  388.         Object->App,
  389.         3,
  390.         MUIM_CallHook, &NoteOffHook,66
  391.         );
  392.  
  393.     DoMethod(Object->BT_6,
  394.         MUIM_Notify, MUIA_Pressed, TRUE,
  395.         Object->App,
  396.         3,
  397.         MUIM_CallHook, &NoteOnHook,68
  398.         );
  399.  
  400.     DoMethod(Object->BT_6,
  401.         MUIM_Notify, MUIA_Pressed, FALSE,
  402.         Object->App,
  403.         3,
  404.         MUIM_CallHook, &NoteOffHook,68
  405.         );
  406.  
  407.     DoMethod(Object->BT_7,
  408.         MUIM_Notify, MUIA_Pressed, TRUE,
  409.         Object->App,
  410.         3,
  411.         MUIM_CallHook, &NoteOnHook,70
  412.         );
  413.  
  414.     DoMethod(Object->BT_7,
  415.         MUIM_Notify, MUIA_Pressed, FALSE,
  416.         Object->App,
  417.         3,
  418.         MUIM_CallHook, &NoteOffHook,70
  419.         );
  420.  
  421.     DoMethod(Object->BT_A,
  422.         MUIM_Notify, MUIA_Pressed, TRUE,
  423.         Object->App,
  424.         3,
  425.         MUIM_CallHook, &NoteOnHook,60
  426.         );
  427.  
  428.     DoMethod(Object->BT_A,
  429.         MUIM_Notify, MUIA_Pressed, FALSE,
  430.         Object->App,
  431.         3,
  432.         MUIM_CallHook, &NoteOffHook,60
  433.         );
  434.  
  435.     DoMethod(Object->BT_Z,
  436.         MUIM_Notify, MUIA_Pressed, TRUE,
  437.         Object->App,
  438.         3,
  439.         MUIM_CallHook, &NoteOnHook,62
  440.         );
  441.  
  442.     DoMethod(Object->BT_Z,
  443.         MUIM_Notify, MUIA_Pressed, FALSE,
  444.         Object->App,
  445.         3,
  446.         MUIM_CallHook, &NoteOffHook,62
  447.         );
  448.  
  449.     DoMethod(Object->BT_E,
  450.         MUIM_Notify, MUIA_Pressed, TRUE,
  451.         Object->App,
  452.         3,
  453.         MUIM_CallHook, &NoteOnHook,64
  454.         );
  455.  
  456.     DoMethod(Object->BT_E,
  457.         MUIM_Notify, MUIA_Pressed, FALSE,
  458.         Object->App,
  459.         3,
  460.         MUIM_CallHook, &NoteOffHook,64
  461.         );
  462.  
  463.     DoMethod(Object->BT_R,
  464.         MUIM_Notify, MUIA_Pressed, TRUE,
  465.         Object->App,
  466.         3,
  467.         MUIM_CallHook, &NoteOnHook,65
  468.         );
  469.  
  470.     DoMethod(Object->BT_R,
  471.         MUIM_Notify, MUIA_Pressed, FALSE,
  472.         Object->App,
  473.         3,
  474.         MUIM_CallHook, &NoteOffHook,65
  475.         );
  476.  
  477.     DoMethod(Object->BT_T,
  478.         MUIM_Notify, MUIA_Pressed, TRUE,
  479.         Object->App,
  480.         3,
  481.         MUIM_CallHook, &NoteOnHook,67
  482.         );
  483.  
  484.     DoMethod(Object->BT_T,
  485.         MUIM_Notify, MUIA_Pressed, FALSE,
  486.         Object->App,
  487.         3,
  488.         MUIM_CallHook, &NoteOffHook,67
  489.         );
  490.  
  491.     DoMethod(Object->BT_Y,
  492.         MUIM_Notify, MUIA_Pressed, TRUE,
  493.         Object->App,
  494.         3,
  495.         MUIM_CallHook, &NoteOnHook,69
  496.         );
  497.  
  498.     DoMethod(Object->BT_Y,
  499.         MUIM_Notify, MUIA_Pressed, FALSE,
  500.         Object->App,
  501.         3,
  502.         MUIM_CallHook, &NoteOffHook,69
  503.         );
  504.  
  505.     DoMethod(Object->BT_U,
  506.         MUIM_Notify, MUIA_Pressed, TRUE,
  507.         Object->App,
  508.         3,
  509.         MUIM_CallHook, &NoteOnHook,71
  510.         );
  511.  
  512.     DoMethod(Object->BT_U,
  513.         MUIM_Notify, MUIA_Pressed, FALSE,
  514.         Object->App,
  515.         3,
  516.         MUIM_CallHook, &NoteOffHook,71
  517.         );
  518.  
  519.     DoMethod(Object->BT_I,
  520.         MUIM_Notify, MUIA_Pressed, TRUE,
  521.         Object->App,
  522.         3,
  523.         MUIM_CallHook, &NoteOnHook,72
  524.         );
  525.  
  526.     DoMethod(Object->BT_I,
  527.         MUIM_Notify, MUIA_Pressed, FALSE,
  528.         Object->App,
  529.         3,
  530.         MUIM_CallHook, &NoteOffHook,72
  531.         );
  532.  
  533.     DoMethod(Object->BT_S,
  534.         MUIM_Notify, MUIA_Pressed, TRUE,
  535.         Object->App,
  536.         3,
  537.         MUIM_CallHook, &NoteOnHook,49
  538.         );
  539.  
  540.     DoMethod(Object->BT_S,
  541.         MUIM_Notify, MUIA_Pressed, FALSE,
  542.         Object->App,
  543.         3,
  544.         MUIM_CallHook, &NoteOffHook,49
  545.         );
  546.  
  547.     DoMethod(Object->BT_D,
  548.         MUIM_Notify, MUIA_Pressed, TRUE,
  549.         Object->App,
  550.         3,
  551.         MUIM_CallHook, &NoteOnHook,51
  552.         );
  553.  
  554.     DoMethod(Object->BT_D,
  555.         MUIM_Notify, MUIA_Pressed, FALSE,
  556.         Object->App,
  557.         3,
  558.         MUIM_CallHook, &NoteOffHook,51
  559.         );
  560.  
  561.     DoMethod(Object->BT_G,
  562.         MUIM_Notify, MUIA_Pressed, TRUE,
  563.         Object->App,
  564.         3,
  565.         MUIM_CallHook, &NoteOnHook,54
  566.         );
  567.  
  568.     DoMethod(Object->BT_G,
  569.         MUIM_Notify, MUIA_Pressed, FALSE,
  570.         Object->App,
  571.         3,
  572.         MUIM_CallHook, &NoteOffHook,54
  573.         );
  574.  
  575.     DoMethod(Object->BT_H,
  576.         MUIM_Notify, MUIA_Pressed, TRUE,
  577.         Object->App,
  578.         3,
  579.         MUIM_CallHook, &NoteOnHook,56
  580.         );
  581.  
  582.     DoMethod(Object->BT_H,
  583.         MUIM_Notify, MUIA_Pressed, FALSE,
  584.         Object->App,
  585.         3,
  586.         MUIM_CallHook, &NoteOffHook,56
  587.         );
  588.  
  589.     DoMethod(Object->BT_J,
  590.         MUIM_Notify, MUIA_Pressed, TRUE,
  591.         Object->App,
  592.         3,
  593.         MUIM_CallHook, &NoteOnHook,58
  594.         );
  595.  
  596.     DoMethod(Object->BT_J,
  597.         MUIM_Notify, MUIA_Pressed, FALSE,
  598.         Object->App,
  599.         3,
  600.         MUIM_CallHook, &NoteOffHook,58
  601.         );
  602.  
  603.     DoMethod(Object->BT_W,
  604.         MUIM_Notify, MUIA_Pressed, TRUE,
  605.         Object->App,
  606.         3,
  607.         MUIM_CallHook, &NoteOnHook,48
  608.         );
  609.  
  610.     DoMethod(Object->BT_W,
  611.         MUIM_Notify, MUIA_Pressed, FALSE,
  612.         Object->App,
  613.         3,
  614.         MUIM_CallHook, &NoteOffHook,48
  615.         );
  616.  
  617.     DoMethod(Object->BT_X,
  618.         MUIM_Notify, MUIA_Pressed, TRUE,
  619.         Object->App,
  620.         3,
  621.         MUIM_CallHook, &NoteOnHook,50
  622.         );
  623.  
  624.     DoMethod(Object->BT_X,
  625.         MUIM_Notify, MUIA_Pressed, FALSE,
  626.         Object->App,
  627.         3,
  628.         MUIM_CallHook, &NoteOffHook,50
  629.         );
  630.  
  631.     DoMethod(Object->BT_C,
  632.         MUIM_Notify, MUIA_Pressed, TRUE,
  633.         Object->App,
  634.         3,
  635.         MUIM_CallHook, &NoteOnHook,52
  636.         );
  637.  
  638.     DoMethod(Object->BT_C,
  639.         MUIM_Notify, MUIA_Pressed, FALSE,
  640.         Object->App,
  641.         3,
  642.         MUIM_CallHook, &NoteOffHook,52
  643.         );
  644.  
  645.     DoMethod(Object->BT_V,
  646.         MUIM_Notify, MUIA_Pressed, TRUE,
  647.         Object->App,
  648.         3,
  649.         MUIM_CallHook, &NoteOnHook,53
  650.         );
  651.  
  652.     DoMethod(Object->BT_V,
  653.         MUIM_Notify, MUIA_Pressed, FALSE,
  654.         Object->App,
  655.         3,
  656.         MUIM_CallHook, &NoteOffHook,53
  657.         );
  658.  
  659.     DoMethod(Object->BT_B,
  660.         MUIM_Notify, MUIA_Pressed, TRUE,
  661.         Object->App,
  662.         3,
  663.         MUIM_CallHook, &NoteOnHook,55
  664.         );
  665.  
  666.     DoMethod(Object->BT_B,
  667.         MUIM_Notify, MUIA_Pressed, FALSE,
  668.         Object->App,
  669.         3,
  670.         MUIM_CallHook, &NoteOffHook,55
  671.         );
  672.  
  673.     DoMethod(Object->BT_N,
  674.         MUIM_Notify, MUIA_Pressed, TRUE,
  675.         Object->App,
  676.         3,
  677.         MUIM_CallHook, &NoteOnHook,57
  678.         );
  679.  
  680.     DoMethod(Object->BT_N,
  681.         MUIM_Notify, MUIA_Pressed, FALSE,
  682.         Object->App,
  683.         3,
  684.         MUIM_CallHook, &NoteOffHook,57
  685.         );
  686.  
  687.     DoMethod(Object->BT_Virgule,
  688.         MUIM_Notify, MUIA_Pressed, TRUE,
  689.         Object->App,
  690.         3,
  691.         MUIM_CallHook, &NoteOnHook,59
  692.         );
  693.  
  694.     DoMethod(Object->BT_Virgule,
  695.         MUIM_Notify, MUIA_Pressed, FALSE,
  696.         Object->App,
  697.         3,
  698.         MUIM_CallHook, &NoteOffHook,59
  699.         );
  700.  
  701.     DoMethod(Object->BT_PointVirg,
  702.         MUIM_Notify, MUIA_Pressed, TRUE,
  703.         Object->App,
  704.         3,
  705.         MUIM_CallHook, &NoteOnHook,60
  706.         );
  707.  
  708.     DoMethod(Object->BT_PointVirg,
  709.         MUIM_Notify, MUIA_Pressed, FALSE,
  710.         Object->App,
  711.         3,
  712.         MUIM_CallHook, &NoteOffHook,60
  713.         );
  714.  
  715.     DoMethod(Object->SL_velocity,
  716.         MUIM_Notify, MUIA_Slider_Level, MUIV_EveryTime,
  717.         Object->App,
  718.         3,
  719.         MUIM_CallHook, &VelocityChangeHook, Object
  720.         );
  721.  
  722.     DoMethod(Object->SL_MidiChannel,
  723.         MUIM_Notify, MUIA_Slider_Level, MUIV_EveryTime,
  724.         Object->App,
  725.         3,
  726.         MUIM_CallHook, &MidiChannelChangeHook, Object
  727.         );
  728.  
  729.     DoMethod(Object->WI_Principale,
  730.         MUIM_Window_SetCycleChain, Object->BT_2,
  731.         Object->BT_3,
  732.         Object->BT_5,
  733.         Object->BT_6,
  734.         Object->BT_7,
  735.         Object->BT_A,
  736.         Object->BT_Z,
  737.         Object->BT_E,
  738.         Object->BT_R,
  739.         Object->BT_T,
  740.         Object->BT_Y,
  741.         Object->BT_U,
  742.         Object->BT_I,
  743.         Object->BT_S,
  744.         Object->BT_D,
  745.         Object->BT_G,
  746.         Object->BT_H,
  747.         Object->BT_J,
  748.         Object->BT_W,
  749.         Object->BT_X,
  750.         Object->BT_C,
  751.         Object->BT_V,
  752.         Object->BT_B,
  753.         Object->BT_N,
  754.         Object->BT_Virgule,
  755.         Object->BT_PointVirg,
  756.         Object->SL_velocity,
  757.         Object->SL_MidiChannel,
  758.         0
  759.         );
  760.  
  761.     set(Object->WI_Principale,
  762.         MUIA_Window_Open, TRUE
  763.         );
  764.  
  765.  
  766.     return(Object);
  767. }
  768.  
  769.  
  770. void DisposeApp(struct ObjApp * Object)
  771. {
  772.     MUI_DisposeObject(Object->App);
  773.     FreeVec(Object);
  774. }
  775.  
  776. main(void)
  777. {
  778.     BOOL    running = TRUE;
  779.     ULONG    signal;
  780.  
  781.     if (!(MUIMasterBase=OpenLibrary("muimaster.library",0)))
  782.     {
  783.         printf("Can't open muimaster.library...");
  784.         goto fin;
  785.     }
  786.  
  787.     if (!(MidiBase=OpenLibrary(MIDINAME,MIDIVERSION)))
  788.     {
  789.         printf("Can't open midi library...");
  790.         goto fin;
  791.     }
  792.  
  793.     if (!(source = CreateMSource(NULL,NULL)))
  794.     {
  795.         printf("Can't create source\n");
  796.         goto fin;
  797.     }
  798.  
  799.     if (!(RouteOut = MRouteSource(source,"MidiOut",NULL)))
  800.     {
  801.         printf("Can't find MidiOut\n");
  802.         goto fin;
  803.     }
  804.  
  805.  
  806.     App = CreateApp();
  807.  
  808.     while (running)
  809.         {
  810.                 switch (DoMethod(App->App,MUIM_Application_Input,&signal))
  811.                 {
  812.                 case MUIV_Application_ReturnID_Quit:
  813.                         running = FALSE;
  814.                         break;
  815.                 }
  816.     if (running && signal) Wait(signal);
  817.         }
  818.     DisposeApp(App);
  819.  
  820.  
  821. fin:
  822.     if (source) DeleteMSource(source);
  823.     if (RouteOut) DeleteMRoute(RouteOut);
  824.     if (MUIMasterBase) CloseLibrary(MUIMasterBase);
  825.     if (MidiBase) CloseLibrary(MidiBase);
  826.     
  827.     exit(0);        
  828. }
  829.